home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 April
/
EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso
/
EARCD
/
comm
/
ums
/
IntuiNews1_4a.lha
/
UMS
/
Rexx
/
Mails2Guide.intui
< prev
next >
Wrap
Text File
|
1996-05-28
|
11KB
|
475 lines
/* ARexx - Script fuer IntuiNews */
/*
** $VER: Mails2Guide.intui 1.0 (14.04.96) Copyright (c) Kristian Laß.
** Basierend auf Mails2Guide.mdmrexx 1.3 (25.06.95) Copyright (c) Jürgen Kohrmeyer.
**
** Beschreibung:
** -------------
** Das Script erstellt aus allen markierten Nachrichten
** eine Datei im Amigaguide-Format.
**
**
** Installation:
** -------------
** Das Skript selber muß nach Rexx: kopiert werden. Anschließend muß
** die Konfigurationsvariable IntuiNews.Rexx um eine Zeile ähnlich
** folgender erweitert werden:
** ArticleWindow F7 Mails2Guide.intui
** Mit Hilfe der entsprechenden F-Taste kann das Skript dann aufgerufen
** werden.
**
** Am Anfang des Scripts können einige Parmeter eingestellt werden:
**
** verzeichnis - Gibt ein Verzeichnis an, das beim Aufruf des
** Filerequesters als Standard verwendet wird.
**
** multiview - Gibt das Anzeigeprogramm für den Guide an, %s
** dient dabei als Platzhalter für den Namen des
** Publicscreens von IntuiNews.
**
** leerzeilen - Gibt an, ob auf der Titelseite zwischen den
** einzelnen Threads Leerzeilen stehen sollen.
** 0 = Nein, 1 = Ja
**
** backups - Gibt an, ob bei bereits existierendem Guide
** eine Sicherheitskopie angelegt werden soll.
** 0 = Nein, 1 = Ja
**
**
** Funktionelle Änderungen gegenüber Mails2Guide.mdmrexx:
** ------------------------------------------------------
** Anzahl der Gesamtmails in der Gruppe taucht im Guide nicht mehr auf.
** Versionsabfrage von MicroDot entfernt
** Titel der Newsgroup taucht nicht im Guide auf, da programmseitig
** nicht feststellbar.
** Eventuell einer Nachricht anhängende Binärfiles werden nicht erwähnt
**
**
** Autor:
** ------
** Kristian Laß EMail: kristian@ceres.ruhr.de
**
**************************************************************************/
/*
** Startverzeichnis für den Filerequest
*/
verzeichnis = 'RAM:'
/*
** Anzeigeprogramm für den Guide
*/
multiview = 'SYS:Utilities/MultiView PUBSCREEN %s'
/*
** Leerzeilen zwischen Threads erzeugen? (0 = Nein, 1 = Ja)
*/
leerzeilen = 1
/*
** Sicherheitskopie anlegen? (0 = Nein, 1 = Ja)
*/
backups = 1
/*************************************************************************/
/* Konstantendeklarationen aus UMSConsts.rexx: */
/* enumeration of fields in an UMS-message */
UMSCODE_MsgText = 0
UMSCODE_FromName = 1
UMSCODE_FromAddr = 2
UMSCODE_ToName = 3
UMSCODE_ToAddr = 4
UMSCODE_MsgID = 5
UMSCODE_CreationDate = 6
UMSCODE_ReceiveDate = 7
UMSCODE_RefID = 8
UMSCODE_Group = 9
UMSCODE_Subject = 10
UMSCODE_Attributes = 11
UMSCODE_Comments = 12
UMSCODE_Organization = 13
UMSCODE_Distribution = 14
UMSCODE_Folder = 15
UMSCODE_FidoID = 16
UMSCODE_MausID = 17
UMSCODE_ReplyGroup = 18
UMSCODE_ReplyName = 19
UMSCODE_ReplyAddr = 20
UMSCODE_FidoText = 32
UMSCODE_ErrorText = 33
UMSCODE_Newsreader = 34
/*
** Beginn des Scripts
*/
OPTIONS RESULTS
inport = ADDRESS()
/*
** Libraries oeffnen
*/
IF ~SHOW('LIBRARIES','rexxtricks.library') THEN
IF ~ADDLIB('rexxtricks.library',0,-30,38) THEN
EXIT(10)
IF ~SHOW('LIBRARIES','rexxsupport.library') THEN
IF ~ADDLIB('rexxsupport.library',0,-30,0) THEN
EXIT(10)
if ~show("L", "ums.library") then do
if ~addlib("ums.library", 0, -210, 8) then do
say "ums.library not found!"
exit(10)
end
end
GETACCOUNT
Account = UMSLogin("", "@"||result, "default")
If Account = 0 Then exit(20)
/*
** Datum ermitteln
*/
PARSE VALUE DATE('SORTED') WITH 1 jahr 5 monat 7 tag
datum = tag || '.' || monat || '.' || jahr
/*
** Namen der Guide-Datei ermitteln
*/
INFO "SCREEN"
screenname = result
address command "requestfile >t:m2g-verzeichnis "||""""||verzeichnis||""""||" pubscreen "||screenname
If ~Open("Dateiname","t:m2g-verzeichnis","r") Then do
UMSLogout(Account)
EXIT(0)
end
guidename = Strip(ReadLn("Dateiname"),,"""")
Close("Dateiname")
address command "delete t:m2g-verzeichnis"
guidename = MAKESUFFIX(guidename,'guide','R')
/*
** Prüfen ob die Datei bereits existiert
*/
anhaengen = 0
IF EXISTS(guidename) THEN DO
/* REQUEST '"Mails2Guide-Request"' '"**_Überschreiben|An_hängen|_Abbrechen"' '"Die Datei'||'0A'x||guidename||'0A'x||'existiert bereits."' */
REQUEST '"Mails2Guide-Request"' '"**_Überschreiben|An_hängen|_Abbrechen"' '"Die Datei '||guidename||' existiert bereits."'
auswahl=result
IF auswahl = 0 THEN DO
UMSLogout(Account)
EXIT(0)
END
IF auswahl = 2 THEN DO
anhaengen = 1
IF ~READFILE(guidename,'alt') THEN
QUIT('Die Datei'||'0A'x||guidename||'0A'x||'kann nicht gelesen werden!',10)
IF LEFT(alt.1,9) ~= '@database' THEN
QUIT('Die Datei'||'0A'x||guidename||'0A'x||'ist keine AmigaGuide Datei!',10)
END
IF backups THEN DO
ADDRESS COMMAND 'copy' guidename guidename||'.bak'
IF rc ~= 0 THEN
QUIT('Von der Datei'||'0A'x||guidename||'0A'x||'kann keine Sicherheitskopie angelegt werden!',10)
END
END
/*
** Betreffs und Nummern aller markierten Nachrichten ermitteln
*/
GETSELMSGNUMS
mailnumbers = RESULT
If Words(mailnumbers) = 0 Then do
UMSLogout(Account)
exit(0)
end
anzmails = Words(mailnumbers)
Do i = 0 to anzmails-1
drop mail.
If ~UMSReadMsgHeader(Account, Word(mailnumbers, i+1), mail.)
Then leave /* Unlesbare Nachrichten überspringen */
/* Im Array mailpos wurden die Indexpositionen der Nachrichten festgehalten. Statt mailpos(i) kann Word(mailnumbers,i) o.ä. verwendet werden
mailpos.i = i */
mid.i = mail.UMSCODE_MsgID
bez.i = mail.UMSCODE_RefID
bet.i = mail.UMSCODE_Subject
IF mail.UMSCODE_FromName ~= '' THEN DO
realname.i = mail.UMSCODE_FromName
abs.i = mail.UMSCODE_FromAddr '(' || mail.UMSCODE_FromName || ')'
END
ELSE DO
realname.i = mail.UMSCODE_FromAddr
abs.i = mail.UMSCODE_FromAddr
END
END
/*
** Guide-Datei anlegen
*/
IF ~OPEN('guide',guidename,'W') THEN
QUIT('Die Datei'||'0A'x||guidename||'0A'x||'kann nicht beschrieben werden!',10)
CALL WRITELN('guide','@database umsmsgs.guide')
CALL WRITELN('guide','@node main umsmsgs.guide"')
CALL WRITELN('guide','')
CALL WRITELN('guide',' Nachrichten, Stand' datum || ':')
/*
** Bezugsnachricht berechnen
** Anzahl Zeichen berechnen, die jeder Betreff eingerückt werden muß
** Länge der längsten Zeile einschließlich Einrückung berechnen
*/
maxlen = 0
DO i = 0 TO anzmails-1
spaces.i = 0
DO x = 1 TO i
IF mid.x = bez.i THEN DO
spaces.i = spaces.x+1
LEAVE
END
END
len = LENGTH(bet.i)+spaces.i
IF len > maxlen THEN
maxlen = len
END
/*
** Zeilenanfänge für Thread berechnen
*/
anfang.0 = ''
DO i = 0 TO anzmails-1
SELECT
WHEN spaces.i = 0 THEN anfang.i = ''
WHEN spaces.i = 1 THEN anfang.i = '·'
OTHERWISE DO
succ = i+1
pred = i-1
anfang.i = LEFT(anfang.pred,spaces.i-1)
IF spaces.i ~= spaces.pred THEN DO
bezug = 0
DO x = i TO anzmails
IF bez.x = bez.pred THEN DO
anfang.i = OVERLAY('|',anfang.i,spaces.i-1,1)
bezug = 1
LEAVE
END
END
IF ~bezug & spaces.i >= spaces.pred THEN
anfang.i = OVERLAY(' ',anfang.i,spaces.i-1,1)
END
anfang.i = OVERLAY('·',anfang.i,spaces.i,1)
END
END
END
/*
** Alte Titelseite in den Guide übernehmen
*/
anzaltmails = 0
IF anhaengen THEN DO
DO zeile = 1 TO alt.0
IF LEFT(alt.zeile,5) = ' @{" ' THEN
LEAVE
END
PARSE VAR alt.zeile anfang '" link "' ende
IF LENGTH(anfang)-6 > maxlen THEN
maxlen = LENGTH(anfang)-6
CALL WRITELN('guide','')
DO zeile = zeile TO alt.0
nextzeile = zeile+1
IF alt.zeile = '' & LEFT(alt.nextzeile,8) = '@endnode' THEN
LEAVE
ELSE DO
IF alt.zeile ~= '' THEN DO
PARSE VAR alt.zeile anfang '" link "' ende
CALL WRITELN('guide',LEFT(anfang,maxlen+6)||'" link "'||ende)
END
ELSE
CALL WRITELN('guide',alt.zeile)
END
IF alt.zeile ~= '' THEN
anzaltmails = anzaltmails+1
END
END
ELSE DO
IF ~leerzeilen THEN
CALL WRITELN('guide','')
END
/*
** Neue Titelseite schreiben
*/
DO i = 0 TO anzmails-1
buttontext = TRANSLATE(LEFT(bet.i,maxlen-spaces.i),"'",'"')
text = ' ' || anfang.i || '@{"' buttontext '" link "nachricht_' || anzaltmails+i || '"}' realname.i
IF spaces.i = 0 & leerzeilen THEN
CALL WRITELN('guide','')
CALL WRITELN('guide',text)
END
CALL WRITELN('guide','')
CALL WRITELN('guide','@endnode')
CALL WRITELN('guide','')
/*
** Alte Nachrichten in den Guide übernehmen
*/
IF anhaengen THEN DO
DO zeile = zeile+2 TO alt.0
CALL WRITELN('guide',alt.zeile)
END
END
CALL CLOSE('guide')
/*
** Neue Nachrichten in den Guide schreiben
*/
node.0 = 8
node.2 = ''
node.7 = ''
node.8 = '--------------------------------------------------------------------------'
node.9 = ''
endnode.0 = 2
endnode.1 = '@endnode'
endnode.2 = ''
binmail.0 = 2
binmail.2 = ''
DO i = 0 TO anzmails-1
drop mail.
If ~UMSReadMsgAll(Account, Word(mailnumbers, i+1), mail.)
Then leave /* Unlesbare Nachrichten überspringen */
node.1 = '@node "nachricht_' || anzaltmails+i || '" "' || TRANSLATE(bet.i,"'",'"') || '"'
node.3 = 'Absender:' abs.i
node.4 = 'Betreff :' bet.i
node.5 = 'Datum :' mail.UMSCODE_CreationDate /* Wegen des nicht festgelegten Datumsformates ist einfaches Verarbeiten nicht möglich */
node.6 = 'MsgID :' mid.i
IF ~WRITEFILE(guidename,'node','A') THEN
QUIT('Fehler beim Schreiben der Nachrichten!',10)
/* Teil zur Bearbeitung von Binärnachrichten entfernt */
IF OPEN('guide',guidename,'A') THEN
If Writech('guide',mail.UMSCODE_MsgText)=0 Then
QUIT('Schreiben eines Nachrichteninhalts fehlgeschlagen!',10)
Else
Close('guide')
Else
QUIT('Schreiben eines Nachrichteninhalts fehlgeschlagen!',10)
IF ~WRITEFILE(guidename,'endnode','A') THEN
QUIT('Fehler beim Schreiben der Nachrichten!',10)
END
SETPOS 0
/*
** Logoff durchführen
*/
UMSLogout(Account)
/*
** Gerade erstellten Guide anzeigen
*/
position = POS('%S',UPPER(multiview))
IF position ~= 0 THEN
commandstring = LEFT(multiview,position-1) || inport || SUBSTR(multiview,position+2) guidename
ELSE
commandstring = multiview guidename
ADDRESS COMMAND commandstring
EXIT(0)
/*
** Script mit Fehlermeldung beenden
*/
quit:
PARSE ARG msg,rcode
UMSLogout(Account)
REQUEST '"Mails2Guide-Request" "**_Abbrechen" "'||msg||'"'
EXIT(rcode)